/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package comunicacion;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

/**
 *
 * @author JuanP
 */
public class GestorConexiones {

    private HashMap<String, Conexion> conexiones;
    public static GestorConexiones instance;

    private GestorConexiones() {
        conexiones = new HashMap();
    }

    public static GestorConexiones getInstance() {
        if (instance == null) {
            instance = new GestorConexiones();
        }
        return instance;
    }

    public void enviarTrama(int nCodigo, String sTrama) {
        System.out.println("Enviando trama a todos");
        for (Map.Entry<String, Conexion> elem : conexiones.entrySet()) {
            //System.out.println("Enviando a "+elem.getValue().getnEstacion()+":"+sTrama);
            elem.getValue().enviarMensaje(nCodigo, sTrama);
        }
    }

    public void enviarMensajeEstacion(int nCodigo, String sTrama,String nestacion) {
        Conexion con = conexiones.get(nestacion);
        con.enviarMensaje(nCodigo, sTrama);       
    }

    public void conectaNuevo(Conexion nuevo) {
        for (Map.Entry<String, Conexion> elem : conexiones.entrySet()) {
            //A la nueva estación le envio todos las estaciones actuales
            nuevo.enviarMensaje(1, elem.getValue().getnEstacion());
        }
        //agregamos la nuevas estacion al hashmap
        conexiones.put(nuevo.getnEstacion(), nuevo);
        System.out.println("Creada la conexion");
        enviarTrama(1, nuevo.getnEstacion());
    }

    public void desconecta(Conexion eliminar) {
        Iterator it = conexiones.keySet().iterator();
        while (it.hasNext()) {
            Conexion c = (Conexion) conexiones.get(it.next());
            if (!c.equals(eliminar)) {
                c.enviarMensaje(3, eliminar.getnEstacion());
            }
        }
        eliminar.interrupt();
        conexiones.remove(eliminar.getnEstacion());
    }
}
